package com.yxw.yxnet_cd_center.customer_service.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yxw.yxnet_cd_center.customer_service.dto.ChatRecordQueryDTO;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsNoticeEntity;
import com.yxw.yxnet_cd_center.customer_service.vo.ChatRecordVo;
import com.yxw.yxnet_cd_center.customer_service.vo.MemberVo;
import com.yxw.yxnet_cd_center.customer_service.vo.NoticeCircleVo;
import com.yxw.yxnet_cd_center.customer_service.vo.NoticeUserVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @DESC 消息设置
 * @author liuxin
 * @date 2023.09.13
 */
@Repository
public interface NoticeMapper extends BaseMapper<YxCsNoticeEntity> {

    /**
     * 新增通知人员信息
     * @param noticeId
     * @param noticeIdList
     */
    void addNoticeUser(@Param("noticeId") Long noticeId, @Param("list")List<Long> noticeIdList);

    /**
     * 删除提醒人员信息
     * @param noticeId
     */
    void deleteNoticeUserByNoticeId(Long noticeId);

    /**
     * 消息通知状态修改
     * @param noticeId
     */
    void updateStatusById(Long noticeId);

    /**
     * 新增提醒方式
     * @param noticeId
     * @param noticeWay
     */
    void addNoticeWay(@Param("noticeId") Long noticeId, @Param("list") List<Integer> noticeWay);

    /**
     * 查询提醒方式
     * @param noticeId
     * @return
     */
    List<Long> getNoticeWayById(Long noticeId);

    /**
     * 删除提方式
     * @param noticeId
     */
    void deleteNoticeWayById(Long noticeId);

    /**
     * 消息设置-聊天记录列表统计
     * @param page
     * @param dto
     * @return
     */
    List<ChatRecordVo> getChatRecordList(Page<ChatRecordVo> page,@Param("dto") ChatRecordQueryDTO dto);

    /**
     * 查询消息通知人
     * @param noticeId
     * @return
     */
    List<MemberVo> getNoticeUserById(Long noticeId);

    /**
     * 删除群聊统计
     */
    void deleteChatRecord();

    /**
     * 新增群聊统计
     */
    void addChatRecord();

    /**
     * 查询通知人员和通知信息
     *
     * @param codeType
     * @param userIds
     * @return
     */
    List<NoticeUserVo> getSendUser(@Param("codeType") String codeType,@Param("userIds") List<Long> userIds);

    /**
     * 发送信息内容
     * @param codeType
     * @param sendType
     * @return
     */
    List<NoticeUserVo> getSendNotice(@Param("codeType")  String codeType,@Param("sendType") Integer sendType);

    /**
     * 根据通知类型查询通知信息
     * @param code
     * @return
     */
    YxCsNoticeEntity getNoticeByType(String code);
}
